ceae90f78068f7a11ed546f1fd23ada51466ac6f,java/java-impl/src/com/intellij/codeInsight/completion/SmartCompletionDecorator.java,SmartCompletionDecorator,computeTailType,#InsertionContext#,49

Before Change


      TailType cached = itemType;
      int cachedPrior = 0;
      if (type != null && type.isValid()) {
        for (ExpectedTypeInfo info : myExpectedTypeInfos) {
          final PsiType infoType = info.getType();
          if (PsiType.VOID.equals(infoType)) {
            cached = info.getTailType();
            continue;
          }

          if (infoType.equals(type) && cachedPrior < 2) {
            cachedPrior = 2;
            cached = info.getTailType();
          }
          else if (cachedPrior == 2 && cached != info.getTailType()) {
            cachedPrior = 3;
            cached = itemType;
          }

After Change


        Set<TailType> voidTyped = new HashSet<TailType>();
        Set<TailType> sameTyped = new HashSet<TailType>();
        Set<TailType> assignableTyped = new HashSet<TailType>();
        for (ExpectedTypeInfo info : myExpectedTypeInfos) {
          final PsiType infoType = info.getType();
          if (PsiType.VOID.equals(infoType)) {
            voidTyped.add(info.getTailType());
          } else if (infoType.equals(type)) {
            sameTyped.add(info.getTailType());
          } else if ((infoType.isAssignableFrom(type) && info.getKind() == ExpectedTypeInfo.TYPE_OR_SUBTYPE) ||
                     (type.isAssignableFrom(infoType) && info.getKind() == ExpectedTypeInfo.TYPE_OR_SUPERTYPE)) {
            assignableTyped.add(info.getTailType());
          }
        }